【小ネタ】tmpfsを調べる

【小ネタ】tmpfsを調べる

Clock Icon2024.10.25

こんにちわ、札幌のヨシエです。

EC2インスタンスで検証を行っている時にバイナリなどを/tmpに配置しておりまして、節約のために電源OFFすることでバイナリ等が消えました。
自分でも何やってるんだと反省しまして、本記事を書きました。

何が発生した? /tmpについて

本記事を読まれてる方にはもうすでにご存知の方もいらっしゃると思いますし、Linuxを触り始めた方もいらっしゃると思うので前提をフラットにしたく概要を書かせてもらいます。

/tmpはキャッシュなどの一時的に保存されるファイル配置場所として利用されるディレクトリとなります。
このディレクトリ自体はtmpfsというファイルシステムがマウントされており、これはサーバー(EC2インスタンス)の電源オフにすることで保存内容が削除されると記憶してました。

tmpfsはインメモリファイルシステムとしてメモリ上に作成されるファイルシステムを指します。
イメージとしては、EBSのように扱うことが出来てアクセスが早いといった特色はありつつも、
メモリ上の領域であることから電源をオフにすると保存されているデータが削除されます。

起こったことと自分に対して「私よ、忘れるんじゃないぞ」という戒めからAmazonLinuxとUbuntuでどうなっているか確認してみました。

確認対象OSディストリビューション

対象OS 利用AMI_ID
AmazonLinux2023 ami-013a28d7c2ea10269
AmazonLinux2 ami-0eda63ec8af4f056e
Ubuntu24.04 ami-0a0b7b240264a48d7
Ubuntu22.04 ami-0162fe8bfebb6ea16

確認方法

挙動を確認する方法として以下の作業を行いました。

  1. テストファイル作成
  2. インスタンス電源OFF
  3. インスタンス電源ON
  4. テストファイルの有無を確認

tmpfsのマウント状態確認

まずtmpfsがマウントされているかをdfコマンド結果で確認しました。

AmazonLinux2023

##########################################################
#df#
##########################################################
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs            4096       0      4096   0% /dev
tmpfs             486156       0    486156   0% /dev/shm
tmpfs             194464     424    194040   1% /run
/dev/xvda1       8310764 1629068   6681696  20% /
tmpfs             486160       0    486160   0% /tmp
/dev/xvda128       10202    1310      8892  13% /boot/efi

AmazonLinux2

##########################################################
#df#
##########################################################
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs          478740       0    478740   0% /dev
tmpfs             487764       0    487764   0% /dev/shm
tmpfs             487764     348    487416   1% /run
tmpfs             487764       0    487764   0% /sys/fs/cgroup
/dev/xvda1       8376300 1863424   6512876  23% /

Ubuntu22.04

##########################################################
#df#
##########################################################
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        7941576 1775956   6149236  23% /
tmpfs             486012       0    486012   0% /dev/shm
tmpfs             194408     828    193580   1% /run
tmpfs               5120       0      5120   0% /run/lock
/dev/xvda15       106832    6186    100646   6% /boot/efi

Ubuntu24.04

##########################################################
#df#
##########################################################
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 7034376 1723316 5294676 25% /
tmpfs 490212 0 490212 0% /dev/shm
tmpfs 196088 840 195248 1% /run
tmpfs 5120 0 5120 0% /run/lock
/dev/xvda16 901520 76972 761420 10% /boot
/dev/xvda15 106832 6246 100586 6% /boot/efi

この時点でtmpfsがマウントされているディストリビューションはAmazonLinux2023ということが見えました。

対象OS /tmpfsマウント状況
AmazonLinux2023 あり
AmazonLinux2 なし
Ubuntu24.04 なし
Ubuntu22.04 なし

電源断の検証を実施

各ディストリビューションが動作しているインスタンスに対して、RunCommandよりテストファイルを作成した後に電源をオフにしてから起動し直しました。

以下は結果になります。

確認結果

対象OS tmpfsマウント状況 テストファイルの有無
AmazonLinux2023 あり 消えた
AmazonLinux2 なし 消えない
Ubuntu24.04 なし 消えた
Ubuntu22.04 なし 消えた

AmazonLinux2023とAmazonLinux2についてはdfコマンド結果から読み取れるように
/tmpにtmpfsをマウントしているAmazonLinux2023はテストファイルが削除されました。
/tmpにtmpfsをマウントされていないAmazonLinux2はテストファイルは残ったままでした。

ここまでは想定通りの結果だったため、「ホント何やってんだろうね、私は。」という気持ち、「ですよね、そうですよね」という気持ちになったことは言うまでもありません。

ただし、Ubuntu22.04と24.04の結果は少し見方が変わることがわかりました。
22.04と24.04では/tmpにtmpfsがマウントされていないように見えますが、ファイルが削除されておりました。

想定される部分を確認してみた結果としてsystemdの設定による挙動かと思われます。

systemdが管理しているサービスにてsysmted-tmpfiles-setup.serviceというものがあり、これはシステム起動時、指定された設定ファイルに基づいて一時ファイルを管理するための初期設定を行います。

この設定ファイルというのは/etc/tmpfiles.d/配下に存在する設定ファイルを指します。
せっかくなので今回検証で利用した各インスタンスの設定状況を見てみようと思います。

Amazon Linux2023

# systemd-tmpfiles --cat-config | grep /tmp | grep -v '#'
q /tmp 1777 root root 10d

Amazon Linux2

# systemd-tmpfiles --cat-config | grep /tmp | grep -v '#'
systemd-tmpfiles: unrecognized option '--cat-config'

Ubuntu24.04

# systemd-tmpfiles --cat-config | grep /tmp | grep -v '#'
D /tmp 1777 root root 30d

Ubuntu22.04

# systemd-tmpfiles --cat-config | grep /tmp | grep -v '#'
D /tmp 1777 root root -

AmazonLinux2023,AmazonLinux2では設定ファイルが存在したり、ファイルそのものが見つからなかったりという状況でした、こちらはテストファイル削除の挙動として結果が見えていたため、Ubuntuに移ります。

Ubuntu24.04の設定ファイル(/usr/lib/tmpfiles.d/tmp.conf)に以下のように記載されてます。

D /tmp 1777 root root 30d

上記の設定値は/tmpに対して、データを残さないクリーンアップ処理が指定されており、かつ30日を超えて残っているファイルを削除する処理を指定されております。

この設定が今回の疑問部分と思い、試しにと設定項目をコメントアウトした後に電源OFFにしたところファイル削除が行われませんでした。(Ubuntu22.04に対しても結果は同様でした)

# diff /usr/lib/tmpfiles.d/tmp.conf /usr/lib/tmpfiles.d/tmp.conf_bk
11c11
< #D /tmp 1777 root root 30d
---
> D /tmp 1777 root root 30d

最後に

サーバーの中身はキレイが一番という意識から/tmpへデータを配置したことが記事作成のきっかけになりました。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.